#ifndef BARDE_H
#define BARDE_H

#include "Classe.h"
using namespace std;

/**
 * Cette classe implémente le barde de l'univers AD&D. Ce touche à
 * tout possède des talents de Voleur, peut lancer des sorts de mage
 * et peut sélectionner ses armes dans la liste des Guerriers.
 *
 * Si le personnage ne sélectionne aucun des talents de Voleurs
 * proposés, il obtient alors 20 PP de bonus, à dépenser pour ses
 * compétences diverses.
 *
 * @author Johan "Solo" Luisier
 */

class Barde : public Classe
{
 private:
 protected:
  static const unsigned int nbr_comp, /**< Nombre de compétences disponibles */
    nbr_restric; /**<  Nombre de restritions disponibles */
 /**
  * Liste de restrictions
  */
  static const vector<ListComp> Comp;
  /**
   * Ensemble des prérequis sur les traits.
   */
  static const vector< Prerequis > Limites;
  /**
   * Ensemble des races autorisées pour cette Classe.
   */
  static const set< string > RacesAdmises;
  void calculNiveau();
  unsigned int calculeTAc0() const;
  void calculNivMag();
 public:
  Barde(unsigned int xp, unsigned int trait[7], unsigned int& PP,
	const string& race);
  Barde(unsigned int xp, unsigned int trait[7], const string& race);
  Barde(unsigned int trait[7], const bool& UI, const string& race);
  ~Barde();
  void appliquerModif();
  void augmenterTalents(const bool& lvl_up);
  void getJS(unsigned int *tab) const;
  void ecrireSorts(const string& nom_fichier, const bool& ecrase) const;
  void nbrSort(unsigned int sorts[], const unsigned int& taille) const;
  void ajoutSorts();
  void getPrixAcces(map<string, unsigned int>*& Map) const;
  unsigned int getPourcent(const bool& lvlUp = true) const;
  string getScoreAdditionnel(const unsigned int& i) const;
};

#endif
